package com.abel.bigwater.dataserver.model.ewide

import com.abel.bigwater.data.BcdString
import com.abel.bigwater.model.JsonHelper
import com.alibaba.fastjson.annotation.JSONField
import io.netty.buffer.ByteBuf
import java.util.*

/**
 * 3.5.4. 心跳包
 * 发起包（终端）：
序号 字段名 长度（字节） 值（示例） 说明
1 会话类别码 1 0x14 见会话类型定义
2 终端时间 6 BCD 心跳包发送终端时间
 */
open class TermHeartData : TermData(KmingDataType.TermHeart, 7) {

    var startTimeStr: BcdString? = null

    /**
     * 时间对象
     */
    @JSONField(format = JsonHelper.FULL_DATE_FORMAT)
    private var _startTime: Date? = null
    var startTime: Date?
        get() {
            _startTime = if (startTimeStr == null) null else startTimeStr!!.toFullYearTime()
            return _startTime
        }
        set(value) {
            _startTime = value
            startTimeStr = if (_startTime == null) null else TermData.fromFullYearTime(_startTime!!)
        }

    override fun bufLength() = 1 + 7

    override fun parseBuf(buf: ByteBuf): Boolean {
        assert(type == KmingDataType.findByCode(buf.readUnsignedByte()))

        startTimeStr = BcdString.create(buf, 7)

        return true
    }

    override fun pack(buf: ByteBuf) {
        buf.alloc().buffer().apply {
            writeByte(type.code.toInt())

            assert(7 == startTimeStr!!.size)
            writeBytes(startTimeStr!!.hexArray)

            buf.writeBytes(this)
        }
    }

    override fun toString(): String {
        return "{type:$type,time:$startTime}"
    }
}